MultiBlinking led zonder delay()
22 berichten
• Pagina 1 van 3 • 1, 2, 3
MultiBlinking led zonder delay()
Sedert een maand heb ik een Arduino UNO en ik moet bekennen dat ik er veel plezier aan beleef. Ik kwam een onderwerp tegen, blinking led without delay() en ik dacht dat wel handig was. Momenteel weet ik nog geen toepassing hiervoor, maar dacht dat er in plaats van de knipperroutine een andere routine ingezet kon worden. Ik heb een programmaatje geschreven dat een code
genereert met maximaal 8 knipperroutines, naar gelang de keuze gemaakt is. dit wordt in een ino-bestand gezet, dit bestand wordt geopend met notepad en dan bestaat de mogelijkheid de code te kopieren om het daarna in de ArduinoIDE te plakken. De knipperroutines zijn gemakkelijk te vervangen door ander routines en de rest van de code is ook eenvoudig aan te passen.
Hier is de link van het programma http://members.chello.nl/e.kaatman1/content/ArduinoMB.zip
Met vriendelijke groet,
Evert
genereert met maximaal 8 knipperroutines, naar gelang de keuze gemaakt is. dit wordt in een ino-bestand gezet, dit bestand wordt geopend met notepad en dan bestaat de mogelijkheid de code te kopieren om het daarna in de ArduinoIDE te plakken. De knipperroutines zijn gemakkelijk te vervangen door ander routines en de rest van de code is ook eenvoudig aan te passen.
Hier is de link van het programma http://members.chello.nl/e.kaatman1/content/ArduinoMB.zip
Met vriendelijke groet,
Evert
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: MultiBlinking led zonder delay()
Evert
Het lijkt erop dat het bestand niet is te lezen.
Groetjes
Nico
Het lijkt erop dat het bestand niet is te lezen.
Groetjes
Nico
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: MultiBlinking led zonder delay()
onder windows7 64: Notepad wordt geopend, vraagt om de ino te creëren en dat was het. maar geen ino
Laat maar je moet hem echt eerst uitpakken
Laat maar je moet hem echt eerst uitpakken
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: MultiBlinking led zonder delay()
Nette code
Klein persoonlijk puntje:
Ik zou zelf altijd een if met accolades doen. Kwestie van consequente gewoonte
dus:
wordt
Klein persoonlijk puntje:
Ik zou zelf altijd een if met accolades doen. Kwestie van consequente gewoonte
dus:
- Code: Alles selecteren
if ((millis() - timer2) >= interval2 ) {
if( digitalRead(2))
digitalWrite(2, LOW);
else
digitalWrite(2, HIGH);
timer2 = millis ();
}
wordt
- Code: Alles selecteren
if ((millis() - timer2) >= interval2 ) {
if( digitalRead(2)) {
digitalWrite(2, LOW);
} else {
digitalWrite(2, HIGH);
}
timer2 = millis ();
}
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: MultiBlinking led zonder delay()
Heb zelf ooit een generator onder excel gemaakt om vanuit een waarheidstabel de sketch te genereren:
- Code: Alles selecteren
Sub GenerateSketch()
' ************************************************************************************
' * Subroutine : GenerateSketch()
' * Purpose : Generate a Truth table sketch for Arduino Uno
' ************************************************************************************
Dim SheetName As String ' name of this sheet
Dim ColumnCtr As Integer ' keeps track of Columns
Dim RowCtr As Integer ' keeps track of Rows
Dim MaxFieldlength As Integer ' longest pin description encountered in file
Dim fieldName As String ' field name used for replacing spaces
Dim MaxTestCaselength As Integer ' longest test case description encountered in file
Dim NumberOfPins As Integer ' number of pins encountered in the sheet
Dim NumberOfInputPins As Integer ' number of pins defined as input
Dim ErrorCnt As Integer ' counts the number of errors during validation
Dim numberOfDigitalInputPins As Integer ' number of digital inputs
Dim numberOfAnalogInputPins As Integer ' number of analog inputs
Dim numberOfDigitalOutputPins As Integer ' number of digital outputs
Dim numberOfConditions As Integer ' number of digital outputs
numberOfDigitalInputPins = 0
numberOfAnalogInputPins = 0
numberOfDigitalOutputPins = 0
numberOfConditions = 0
Dim fileSaveName As Variant
'
' get the name of this sheet
'
SheetName = ActiveSheet.Name
'
' replace any space in between with underscore
'
SheetName = Replace(SheetName, " ", "_")
InitialName = SheetName + ".h"
fileSaveName = Application.GetSaveAsFilename(InitialFileName:=InitialName, _
fileFilter:="Arduino sketches (*.h), *.h")
If fileSaveName <> False Then
'MsgBox "Save as " & fileSaveName
End If
'
' create the file object for the pin headers. the file will be stored
' in the same folder as where this excel file is stored
'
Set FSO = CreateObject("Scripting.FileSystemObject")
Set ofile = FSO.CreateTextFile(fileSaveName)
'
' write fixed part to file
'
ofile.writeline "#ifndef " + UCase(SheetName) + "_H"
ofile.writeline "#define " + UCase(SheetName) + "_H"
ofile.writeline "#include ""TruthTableEngineClass.h"" "
ofile.writeline "/**"
ofile.writeline " * @file " + fileSaveName
ofile.writeline " * @author TruthTable Testset generator"
ofile.write " * @date "
ofile.writeline Date
ofile.writeline " * @version 1.0"
ofile.writeline " * @mainPage"
ofile.writeline " * test set generated for Truth table engine"
ofile.writeline " */"
ofile.writeline ""
ofile.writeline "/**"
ofile.writeline " * SVN version control. do not remove"
ofile.writeline " * $Revision$"
ofile.writeline " * $Date$"
ofile.writeline " * $Author$"
ofile.writeline " */"
ofile.writeline ""
ofile.writeline "#ifdef __IN_ECLIPSE__"
ofile.writeline " #ifdef __cplusplus"
ofile.writeline " extern ""C"" {"
ofile.writeline " #endif"
ofile.writeline " void loop();"
ofile.writeline " void setup();"
ofile.writeline " #ifdef __cplusplus"
ofile.writeline " } // extern ""C"""
ofile.writeline " #endif"
ofile.writeline "#endif"
ofile.writeline "#include <Arduino.h>"
'
' Validate the test set first
'
ErrorCnt = 0
For ColumnCtr = 2 To 100
'
' check if we are through all the fields
'
If IsEmpty(Cells(1, ColumnCtr).Value) Then
'
' No more columns to process
'
Exit For
End If
If UCase(Cells(2, ColumnCtr).Value) <> "I" And UCase(Cells(2, ColumnCtr).Value) <> "O" And UCase(Cells(2, ColumnCtr).Value) <> "A" Then
'
' pin type is not an I, O or A
'
' So set background to RED color
'
Cells(2, ColumnCtr).Interior.Color = RGB(255, 0, 0)
ErrorCnt = ErrorCnt + 1
Else
'
' count the number of each type pin
'
If UCase(Cells(2, ColumnCtr).Value) = "I" Then
numberOfDigitalInputPins = numberOfDigitalInputPins + 1
Else
If UCase(Cells(2, ColumnCtr).Value) = "A" Then
numberOfAnalogInputPins = numberOfAnalogInputPins + 1
Else
numberOfDigitalOutputPins = numberOfDigitalOutputPins + 1
End If
End If
Cells(2, ColumnCtr).Interior.Color = RGB(255, 255, 255)
End If
Next ColumnCtr
'
' test if we found errors
'
If ErrorCnt = 0 Then
'
' loop through the Headers and pick out the defines, input, Analog and Output pins
' skip column 1 as this is descriptive
' the 100 columns is set as I do not expect any boards with more than 100 IO pins
'
ofile.writeline "//"
ofile.writeline "// pin definitions"
ofile.writeline "//"
ofile.writeline ""
For ColumnCtr = 2 To 100
If IsEmpty(Cells(1, ColumnCtr).Value) Then
'
' No more columns to process
'
Exit For
Else
'
' We have a valid column so write a line with pinnumber and description
'
If UCase(Cells(2, ColumnCtr).Value) = "I" Or UCase(Cells(2, ColumnCtr).Value) = "O" Or UCase(Cells(2, ColumnCtr).Value) = "A" Then
'
' write an #define line
'
ofile.write "#define"
ofile.write Chr(9)
fieldName = Cells(6, ColumnCtr).Value
fieldName = Replace(fieldName, " ", "_")
ofile.write UCase(fieldName)
ofile.write "_PIN"
ofile.write Chr(9)
ofile.write Cells(1, ColumnCtr).Value
ofile.write Chr(9)
ofile.write "// "
ofile.writeline UCase(Cells(6, ColumnCtr).Value)
End If
End If
Next ColumnCtr
'
' digital input pins
'
ofile.writeline "//"
ofile.writeline "// pin Array"
ofile.writeline "//"
ofile.writeline "uint8_t " + SheetName + "_inputArray[] = // this array contains all the digital input pins used"
ofile.write "{"
For ColumnCtr = 2 To 100
If IsEmpty(Cells(1, ColumnCtr).Value) Then
'
' No more columns to process
'
Exit For
Else
'
' We have a valid column so write a line with pinnumber and description
'
If UCase(Cells(2, ColumnCtr).Value) = "I" Then
'
' write an array line
'
ofile.write Chr(9)
fieldName = Cells(6, ColumnCtr).Value
fieldName = Replace(fieldName, " ", "_")
ofile.write UCase(fieldName)
ofile.write "_PIN"
ofile.write Chr(9)
ofile.write ","
ofile.write Chr(9)
ofile.write "// "
ofile.writeline Cells(6, ColumnCtr).Value
End If
End If
Next ColumnCtr
ofile.writeline "};"
'
' active input levels
'
ofile.writeline "//"
ofile.writeline "// Active input level Array"
ofile.writeline "//"
ofile.writeline "uint8_t " + SheetName + "_activeInputArray[] = // this array contains the active input level per pin"
ofile.write "{"
For ColumnCtr = 2 To 100
If IsEmpty(Cells(1, ColumnCtr).Value) Then
'
' No more columns to process
'
Exit For
Else
'
' We have a valid column so write a line with pinnumber and description
'
If UCase(Cells(2, ColumnCtr).Value) = "I" Then
'
' write an array line
'
ofile.write Chr(9)
If UCase(Cells(5, ColumnCtr).Value) = "H" Then
ofile.write "HIGH"
ofile.write Chr(9)
ofile.write ","
Else
ofile.write "LOW "
ofile.write Chr(9)
ofile.write ","
End If
ofile.write Chr(9)
ofile.write "// "
ofile.writeline Cells(6, ColumnCtr).Value
End If
End If
Next ColumnCtr
ofile.writeline "};"
'
' analog pins
'
ofile.writeline "//"
ofile.writeline "// Analog pin Array"
ofile.writeline "//"
ofile.writeline "uint8_t " + SheetName + "_analogArray[] = // this array contains all the analog input pins used"
ofile.write "{"
For ColumnCtr = 2 To 100
If IsEmpty(Cells(1, ColumnCtr).Value) Then
'
' No more columns to process
'
Exit For
Else
'
' We have a valid column so write a line with pinnumber and description
'
If UCase(Cells(2, ColumnCtr).Value) = "A" Then
'
' write an array line
'
ofile.write Chr(9)
fieldName = Cells(6, ColumnCtr).Value
fieldName = Replace(fieldName, " ", "_")
ofile.write UCase(fieldName)
ofile.write "_PIN"
ofile.write Chr(9)
ofile.write ","
ofile.write Chr(9)
ofile.write "// "
ofile.writeline Cells(6, ColumnCtr).Value
End If
End If
Next ColumnCtr
ofile.writeline "};"
'
' output pins
'
ofile.writeline "//"
ofile.writeline "// Output pin Array"
ofile.writeline "//"
ofile.writeline "uint8_t " + SheetName + "_outputArray[] = // this array contains all the digital output pins used"
ofile.write "{"
For ColumnCtr = 2 To 100
If IsEmpty(Cells(1, ColumnCtr).Value) Then
'
' No more columns to process
'
Exit For
Else
'
' We have a valid column so write a line with pinnumber and description
'
If UCase(Cells(2, ColumnCtr).Value) = "O" Then
'
' write an array line
'
ofile.write Chr(9)
fieldName = Cells(6, ColumnCtr).Value
fieldName = Replace(fieldName, " ", "_")
ofile.write UCase(fieldName)
ofile.write "_PIN"
ofile.write Chr(9)
ofile.write ","
ofile.write Chr(9)
ofile.write "// "
ofile.writeline Cells(6, ColumnCtr).Value
End If
End If
Next ColumnCtr
ofile.writeline "};"
'
' active output levels
'
ofile.writeline "//"
ofile.writeline "// Active output level Array"
ofile.writeline "//"
ofile.writeline "uint8_t " + SheetName + "_activeOutputArray[] = // this array contains the active output level per pin"
ofile.write "{"
For ColumnCtr = 2 To 100
If IsEmpty(Cells(1, ColumnCtr).Value) Then
'
' No more columns to process
'
Exit For
Else
'
' We have a valid column so write a line with pinnumber and description
'
If UCase(Cells(2, ColumnCtr).Value) = "O" Then
'
' write an array line
'
ofile.write Chr(9)
If UCase(Cells(5, ColumnCtr).Value) = "H" Then
ofile.write "HIGH"
ofile.write Chr(9)
ofile.write ","
Else
ofile.write "LOW "
ofile.write Chr(9)
ofile.write ","
End If
ofile.write Chr(9)
ofile.write "// "
ofile.writeline Cells(6, ColumnCtr).Value
End If
End If
Next ColumnCtr
ofile.writeline "};"
'
' bandwidth array
'
ofile.writeline "//"
ofile.writeline "// Bandwidth array"
ofile.writeline "//"
ofile.writeline "unsigned int " + SheetName + "_bandwidthArray[][2] = // this array contains the active bandwidths"
ofile.write "{"
For ColumnCtr = 2 To 100
If IsEmpty(Cells(1, ColumnCtr).Value) Then
'
' No more columns to process
'
Exit For
Else
'
' We have a valid column so write a line with pinnumber and description
'
If UCase(Cells(2, ColumnCtr).Value) = "A" Then
'
' write an array line
'
ofile.write Chr(9)
ofile.write "{"
ofile.write Chr(9)
ofile.write Cells(3, ColumnCtr).Value
ofile.write ", "
ofile.write Cells(4, ColumnCtr).Value
ofile.write "},"
ofile.write Chr(9)
ofile.write "// "
ofile.writeline Cells(6, ColumnCtr).Value
End If
End If
Next ColumnCtr
ofile.writeline "};"
ofile.writeline "//"
ofile.writeline "// structure for Engine Array entries. Current setup can handle maximum of 8 inputs mapping to 8 outputs"
ofile.writeline "//"
ofile.writeline "#ifndef STRUCT_CONDITION"
ofile.writeline "#define STRUCT_CONDITION"
ofile.writeline "struct condition {"
ofile.writeline " uint32_t inputs; // input conditions"
ofile.writeline " uint32_t outputs; // output results"
ofile.writeline "};"
ofile.writeline "#endif"
ofile.writeline ""
ofile.writeline "//"
ofile.writeline "// Conditions array"
ofile.writeline "//"
ofile.writeline "// instructions for use:"
ofile.writeline "// - on the input side, a ""1"" indicates that that switch or input is SET. See it as an X on a truth table"
ofile.writeline "// - On the output, a ""1"" indicates it will set the output pin."
ofile.writeline "//"
ofile.writeline "// However, as inputs and outputs might be different set in practice. i.e. pull-up or pull-down on the inputs"
ofile.writeline "// or a setting of output would mean a ""0"" while normally they would be high. This is resolved with the"
ofile.writeline "// defines INPUT_ON and OUTPUT_ON at the beginning of the program"
ofile.writeline "//"
'
' Conditions array
'
ofile.writeline "//"
ofile.writeline "// Conditions array"
ofile.writeline "//"
ofile.writeline " condition " + SheetName + "_engineArray[] = // this array contains the Truth table"
ofile.writeline "{"
'
' Process each row
'
For RowCtr = 7 To 10000
If IsEmpty(Cells(RowCtr, 1).Value) Then
'
' No more conditions to process
'
numberOfConditions = RowCtr - 7
Exit For
Else
'
' Input pattern
'
ofile.write Chr(9)
ofile.write "{ B"
For ColumnCtr = 2 To 100
If IsEmpty(Cells(1, ColumnCtr).Value) Then
'
' No more conditions to process
'
Exit For
Else
If UCase(Cells(2, ColumnCtr).Value) = "I" Then
'
' We have a valid column so write a line with pinnumber and description
'
If UCase(Cells(RowCtr, ColumnCtr).Value) = "T" Then
'
' do the input variable
'
ofile.write "1"
Else
ofile.write "0"
End If
End If
End If
Next ColumnCtr
'
' analog inputs
'
For ColumnCtr = 2 To 100
If IsEmpty(Cells(1, ColumnCtr).Value) Then
'
' No more conditions to process
'
Exit For
Else
'
' We have a valid column so write a line with pinnumber and description
'
If UCase(Cells(2, ColumnCtr).Value) = "A" Then
If UCase(Cells(RowCtr, ColumnCtr).Value) = "T" Then
'
' do the analog variable
'
ofile.write "1"
Else
ofile.write "0"
End If
End If
End If
Next ColumnCtr
ofile.write ","
'
' output pattern
'
ofile.write Chr(9)
ofile.write " B"
For ColumnCtr = 2 To 100
If IsEmpty(Cells(1, ColumnCtr).Value) Then
'
' No more conditions to process
'
Exit For
Else
'
' We have a valid column so write a line with pinnumber and description
'
If UCase(Cells(2, ColumnCtr).Value) = "O" Then
If UCase(Cells(RowCtr, ColumnCtr).Value) = "T" Then
'
' do the output variable
'
ofile.write "1"
Else
ofile.write "0"
End If
End If
End If
Next ColumnCtr
ofile.write "},"
'
' add condition text as comment
'
ofile.write Chr(9)
ofile.write "// "
ofile.writeline Cells(RowCtr, 1).Value
End If
Next RowCtr
ofile.writeline "};"
'
' build the arrays containing the values input to the Engine
'
ofile.writeline "uint8_t " + SheetName + "_digitalInputArray[" + Str(numberOfDigitalInputPins) + "]; // contains the digital values read from the pins "
ofile.writeline "unsigned int " + SheetName + "_analogInputArray[" + Str(numberOfAnalogInputPins) + "]; // contains the analog values read from the pins "
ofile.writeline "uint8_t " + SheetName + "_digitalOutputArray[" + Str(numberOfDigitalOutputPins) + "]; // contains the output values read from the engine"
'
' generate the build function for this test set
'
ofile.writeline "//"
ofile.writeline "// collections of all arrays belonging to " + SheetName
ofile.writeline "//"
ofile.writeline "EngineData " + SheetName + "; // contains all the pointers to this testset"
ofile.writeline "EngineData *" + SheetName + "_ptr; // pointer to this testset"
ofile.writeline ""
ofile.writeline "/**"
ofile.writeline "* @name " + SheetName + "_buildModelStructure()"
ofile.writeline "* builds the model structure for this dataset ready to be handed over to the TruthTable Engine"
ofile.writeline "*/"
ofile.writeline "void " + SheetName + "_buildModelStructure() {"
ofile.writeline " " + SheetName + "_ptr = &" + SheetName + "; // get address of Engine test set"
ofile.writeline " //"
ofile.writeline " // get pointers to individual generated arrays"
ofile.writeline " //"
ofile.writeline " " + SheetName + "_ptr->digitalInputArray = " + SheetName + "_digitalInputArray; // inputs from digital ports"
ofile.writeline " " + SheetName + "_ptr->analogInputArray = " + SheetName + "_analogInputArray; // inputs from analog ports"
ofile.writeline " " + SheetName + "_ptr->bandwidthArray = &" + SheetName + "_bandwidthArray[0][0];// bandwidths for analog ports"
ofile.writeline " " + SheetName + "_ptr->activeInputArray = " + SheetName + "_activeInputArray; // input levels when active"
ofile.writeline " " + SheetName + "_ptr->inputArray = " + SheetName + "_inputArray; // pin definitions digital input"
ofile.writeline " " + SheetName + "_ptr->analogArray = " + SheetName + "_analogArray; // pin definitions analog input"
ofile.writeline " " + SheetName + "_ptr->outputArray = " + SheetName + "_outputArray; // pin definitions digital outputs"
ofile.writeline " " + SheetName + "_ptr->activeOutputArray = " + SheetName + "_activeOutputArray; // output levels when active"
ofile.writeline " " + SheetName + "_ptr->digitalOutputArray = " + SheetName + "_digitalOutputArray; // outputs to digital ports"
ofile.writeline " " + SheetName + "_ptr->engineArray = " + SheetName + "_engineArray; // conditions to engine"
ofile.writeline " " + SheetName + "_ptr->numberOfDigitalPins = " + Str(numberOfDigitalInputPins) + ";"
ofile.writeline " " + SheetName + "_ptr->numberOfAnalogPins = " + Str(numberOfAnalogInputPins) + ";"
ofile.writeline " " + SheetName + "_ptr->numberOfOutputPins = " + Str(numberOfDigitalOutputPins) + ";"
ofile.writeline " " + SheetName + "_ptr->numberOfConditions = " + Str(numberOfConditions) + ";"
ofile.writeline "}"
End If
ofile.writeline "#endif"
'
' close file
'
ofile.Close
End Sub
Re: MultiBlinking led zonder delay()
Dankjewel
Ik heb die accolades toegevoegd, maar wat mij opviel is dat de laatste routine één keer uitgevoerd wordt.
Of ik nu 2 of 8 blinking leds kies, de laatste wordt één keer hoog en dan gebeurt er niets meer.
GrtZ Evert
Ik heb die accolades toegevoegd, maar wat mij opviel is dat de laatste routine één keer uitgevoerd wordt.
Of ik nu 2 of 8 blinking leds kies, de laatste wordt één keer hoog en dan gebeurt er niets meer.
GrtZ Evert
Re: MultiBlinking led zonder delay()
Hopelijk krijg ik het echte programmeren onder de knie, groot script is het in VisualBasic geschreven?
Dat programmaatje van mij heb ik in Freebasic geschreven, maar dat is voor excel ongeschikt denk ik.
GrtZ
Dat programmaatje van mij heb ik in Freebasic geschreven, maar dat is voor excel ongeschikt denk ik.
GrtZ
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: MultiBlinking led zonder delay()
Dat script van mij was in VBA geschreven (zit standaard in Excel). Dan kan je gewoon de cellen aflopen.
Re: MultiBlinking led zonder delay()
Klinkt wel interessant, je zou dus ook metingen kunnen doen, deze opslaan en als grafiek weergeven?
22 berichten
• Pagina 1 van 3 • 1, 2, 3
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten