Enrico Marinoni
/
AdafruitCTRLmot
How to use the Adafruit Motor Shield on STM32 NUCLEO 74HC595 + L293D + STM32
Diff: main.cpp
- Revision:
- 0:44fb10b45c97
- Child:
- 1:0de89eebb160
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Dec 27 16:32:20 2017 +0000 @@ -0,0 +1,130 @@ +/* + + By: www.emcu.eu + Date: December 2018 + Simple test for: How to use the Adafruit Motor Shield on STM32 NUCLEO + the explanations are here: + http://www.emcu.eu/how-to-use-the-adafruit-motor-shield-on-stm32-nucleo/ + UART Configuration (It is necessary for see the results, we suggest to use TeraTerm on PC) + Baud Rate: 9600 + Data Bit: 8 + Parity: NONE + Stop Bit: 1 + Flow Control: NONE + + ATTENTION + THE SOFTWARE AND HARDWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS + OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +#include "mbed.h" + +Serial pc(USBTX,USBRX); +DigitalOut LED(LED1); + +DigitalOut clockpin(PB_5); // SCHP or SCK - PB_5 +DigitalOut latchpin(PA_6); // STCP or RCK - PA_6 +DigitalOut OE(PA_8); // OE or G +DigitalOut datapin(PA_9); // DS or SER - PA_9 + +DigitalIn PULS(USER_BUTTON); + +void PressBB(void); +void WaitSerialChar(void); + +int n = 0; + + +int main() { + +const int number[10][8]= +{// Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 Line + { 1, 0, 1, 0, 1, 0, 1, 0}, // 0 + { 0, 1, 0, 1, 0, 1, 0, 1}, // 1 + { 1, 0, 1, 1, 0, 1, 1, 0}, // 2 + { 1, 0, 0, 1, 1, 1, 1, 1}, // 3 + { 1, 1, 0, 0, 1, 1, 0, 0}, // 4 + { 1, 1, 0, 1, 1, 0, 1, 1}, // 5 + { 1, 1, 1, 1, 1, 0, 0, 0}, // 6 + { 0, 0, 0, 0, 1, 1, 1, 1}, // 7 + { 1, 1, 1, 1, 1, 1, 1, 0}, // 8 + { 1, 1, 0, 0, 1, 1, 1, 1} // 9 +}; + +pc.printf("\n\r\n\r\n\r The explanations are here:\n\r"); +pc.printf(" http://www.emcu.eu/how-to-use-the-adafruit-motor-shield-on-stm32-nucleo/ \n\r"); + while(1) + { + OE = 0; + + pc.printf("\n\r\n\r START... \n\r\n\r"); + pc.printf(" 74HC595 \n\r"); + pc.printf(" _______ \n\r"); + pc.printf(" Q1 1 |_| 16 VCC \n\r"); + pc.printf(" Q2 2 15 Q0 \n\r"); + pc.printf(" Q3 3 14 DS \n\r"); + pc.printf(" Q4 4 13 /OE \n\r"); + pc.printf(" Q5 5 12 STCP\n\r"); + pc.printf(" Q6 6 11 SHCP\n\r"); + pc.printf(" Q7 7 10 /MR \n\r"); + pc.printf("GND 8_______ 9 Q7S \n\r\n\r"); + + for(int j=0;j<=1;j++) // 9 + { + latchpin=0; + + pc.printf(" Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0\n\r"); + for(int i=0;i<=7;i++) + { + pc.printf(" %d ", number[j][i]); + datapin=number[j][i]; + wait_ms(1); + clockpin=1; + wait_ms(1); + clockpin=0; + wait_ms(1); + } + + latchpin=1; + wait_ms(5); + latchpin=0; + wait_ms(1); + OE = 1; + wait_ms(1); + OE = 0; + wait_ms(1); + + WaitSerialChar(); + pc.printf(" \n\r"); + + } + pc.printf(" END.... \n\r"); + WaitSerialChar(); + + } +} + + +void WaitSerialChar(void) +{ + pc.printf(" Press a key on PC to continue\n\r"); + while (pc.readable() != 1); + pc.getc(); +} + + +void PressBB(void) +{ + pc.printf("Press Blue Button on PC to continue\n\r"); + while (PULS != 0) // Button not pressed + { + LED = !LED; + wait(0.1); + } +} \ No newline at end of file